# 装饰器其实是python提供的语法糖,是利用了 闭包 和 python的动态语言特性来实现的
# 创建一个闭包,外层函数接收一个函数名的形参,在内层函数中执行该函数名


def test(func):
    print("===func===")

    def inner():
        print("===inner===")
        func()

    return inner


def f1():
    print("====f1====")

f1 = test(f1)  # 将f1传入到test中，返回的是inner，并将其赋值给f1

f1()  # 所以此时执行 f1 时实际是执行了 inner 而inner里面有执行了原来的 f1 函数，这就是python中装饰器的内部原理
